#ifndef DYN_MULTIFUNCTOR_MULTIMAPS_IKEDAMAP_H
#define DYN_MULTIFUNCTOR_MULTIMAPS_IKEDAMAP_H

#include <armadillo>

#include "dyn_multifunctor_multiMaps.h"

/*! \brief Two-dimensional Ikeda map.
 *
 * The iterate() and jacobian() are also
 * reimplemented.
 */

class IkedaMap : public MultiMaps
{
public:
    /*! The constructor sets the parameter of the map.*/
    IkedaMap(const double R,
             const double C_1,
             const double C_2,
             const double C_3,
             const int p);

    /*! @name Ikeda Map Operations.*/
    //@{
    colvec operator()(const colvec X){return iterate(X,1);}
    colvec iterate(const colvec X, int p);
    mat jacobian(const colvec X, int p);
    //@}

    /*! @name Accessor functions. */
    //@{
    double getR(){return r;}
    double getC_1(){return c_1;}
    double getC_2(){return c_2;}
    double getC_3(){return c_3;}

    void setR(double par){r = par;}
    void setC_1(double par){c_1 = par;}
    void setC_2(double par){c_2 = par;}
    void setC_3(double par){c_3 = par;}
    //@}

protected:
    /*! @name Parameters of the map. */
    double r, c_1, c_2, c_3;
};

#endif // DYN_MULTIFUNCTOR_MULTIMAPS_IKEDAMAP_H
